Micron Document
🎖️GitЯра🎖️

Node / meshtastic / Meshtastic-Android / files / app / src / main / java / com / geeksville / mesh / ui / connections / components / CurrentlyConnectedInfo.kt

Displaying Raw • Download

app/src/main/java/com/geeksville/mesh/ui/connections/components/CurrentlyConnectedInfo.kt features/lockdown (1ea87dbb) Text, 6.50 KB

T8b949e/*
* Copyright (c) 2025-2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787com.geeksville.mesh.ui.connections.components

Tff7b72import T7ee787androidx.compose.foundation.layout.Arrangement
Tff7b72import T7ee787androidx.compose.foundation.layout.Column
Tff7b72import T7ee787androidx.compose.foundation.layout.Row
Tff7b72import T7ee787androidx.compose.foundation.layout.fillMaxWidth
Tff7b72import T7ee787androidx.compose.foundation.layout.height
Tff7b72import T7ee787androidx.compose.foundation.layout.padding
Tff7b72import T7ee787androidx.compose.material3.Button
Tff7b72import T7ee787androidx.compose.material3.ButtonDefaults
Tff7b72import T7ee787androidx.compose.material3.MaterialTheme
Tff7b72import T7ee787androidx.compose.material3.Text
Tff7b72import T7ee787androidx.compose.runtime.Composable
Tff7b72import T7ee787androidx.compose.runtime.LaunchedEffect
Tff7b72import T7ee787androidx.compose.runtime.getValue
Tff7b72import T7ee787androidx.compose.runtime.mutableIntStateOf
Tff7b72import T7ee787androidx.compose.runtime.remember
Tff7b72import T7ee787androidx.compose.runtime.setValue
Tff7b72import T7ee787androidx.compose.ui.Alignment
Tff7b72import T7ee787androidx.compose.ui.Modifier
Tff7b72import T7ee787androidx.compose.ui.graphics.Color
Tff7b72import T7ee787androidx.compose.ui.graphics.RectangleShape
Tff7b72import T7ee787androidx.compose.ui.text.style.TextOverflow
Tff7b72import T7ee787androidx.compose.ui.tooling.preview.PreviewLightDark
Tff7b72import T7ee787androidx.compose.ui.unit.dp
Tff7b72import T7ee787co.touchlab.kermit.Logger
Tff7b72import T7ee787com.geeksville.mesh.model.DeviceListEntry
Tff7b72import T7ee787kotlinx.coroutines.delay
Tff7b72import T7ee787kotlinx.coroutines.withTimeout
Tff7b72import T7ee787no.nordicsemi.kotlin.ble.client.exception.OperationFailedException
Tff7b72import T7ee787no.nordicsemi.kotlin.ble.client.exception.PeripheralNotConnectedException
Tff7b72import T7ee787org.jetbrains.compose.resources.stringResource
Tff7b72import T7ee787org.meshtastic.core.database.model.Node
Tff7b72import T7ee787org.meshtastic.core.strings.Res
Tff7b72import T7ee787org.meshtastic.core.strings.disconnect
Tff7b72import T7ee787org.meshtastic.core.strings.firmware_version
Tff7b72import T7ee787org.meshtastic.core.ui.component.MaterialBatteryInfo
Tff7b72import T7ee787org.meshtastic.core.ui.component.MaterialBluetoothSignalInfo
Tff7b72import T7ee787org.meshtastic.core.ui.component.NodeChip
Tff7b72import T7ee787org.meshtastic.core.ui.theme.AppTheme
Tff7b72import T7ee787org.meshtastic.core.ui.theme.StatusColors.StatusRed
Tff7b72import T7ee787org.meshtastic.proto.EnvironmentMetrics
Tff7b72import T7ee787org.meshtastic.proto.Paxcount
Tff7b72import T7ee787org.meshtastic.proto.User
Tff7b72import T7ee787kotlin.time.Duration.Companion.seconds

Tff7b72private Tff7b72const Tff7b72val Te6edf3RSSI_DELAY Tff7b72= T79c0ff1T79c0ff0
Tff7b72private Tff7b72const Tff7b72val Te6edf3RSSI_TIMEOUT Tff7b72= T79c0ff5

Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffLoopWithTooManyJumpStatementsTa5d6ff"Tb4b4b4)
Tf0883e@Composable
Tff7b72fun Td2a8ffCurrentlyConnectedInfoTb4b4b4(
Te6edf3nodeTb4b4b4: Te6edf3NodeTb4b4b4,
Te6edf3onNavigateToNodeDetailsTb4b4b4: Tb4b4b4(Tffa657IntTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onClickDisconnectTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3modifierTb4b4b4: Te6edf3Modifier Tff7b72= Te6edf3ModifierTb4b4b4,
Te6edf3bleDeviceTb4b4b4: Te6edf3DeviceListEntryTb4b4b4.Te6edf3BleTff7b72? Tff7b72= Tff7b72nullTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72var Te6edf3rssi Tff7b72by Te6edf3remember Tb4b4b4{ Te6edf3mutableIntStateOfTb4b4b4(T79c0ff0Tb4b4b4) Tb4b4b4}
Te6edf3LaunchedEffectTb4b4b4(Te6edf3bleDeviceTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3bleDevice Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72while Tb4b4b4(Te6edf3bleDeviceTb4b4b4.Te6edf3peripheralTb4b4b4.Te6edf3isConnectedTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3rssi Tff7b72= Te6edf3withTimeoutTb4b4b4(Te6edf3RSSI_TIMEOUTTb4b4b4.Te6edf3secondsTb4b4b4) Tb4b4b4{ Te6edf3bleDeviceTb4b4b4.Te6edf3peripheralTb4b4b4.Te6edf3readRssiTb4b4b4(Tb4b4b4) Tb4b4b4}
Te6edf3delayTb4b4b4(Te6edf3RSSI_DELAYTb4b4b4.Te6edf3secondsTb4b4b4)
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3PeripheralNotConnectedExceptionTb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3eTb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffFailed to read RSSI Tffd700${Te6edf3eTb4b4b4.Te6edf3messageTffd700}Ta5d6ff" Tb4b4b4}
Tff7b72break
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3OperationFailedExceptionTb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3eTb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffFailed to read RSSI Tffd700${Te6edf3eTb4b4b4.Te6edf3messageTffd700}Ta5d6ff" Tb4b4b4}
Tff7b72break
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3SecurityExceptionTb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3eTb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffFailed to read RSSI Tffd700${Te6edf3eTb4b4b4.Te6edf3messageTffd700}Ta5d6ff" Tb4b4b4}
Tff7b72break
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Te6edf3ColumnTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3modifierTb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3start Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4, Te6edf3end Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4, Te6edf3top Tff7b72= T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3SpaceBetweenTb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3MaterialBatteryInfoTb4b4b4(Te6edf3level Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3batteryLevelTb4b4b4, Te6edf3voltage Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3voltageTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3bleDevice Tff7b72is Te6edf3DeviceListEntryTb4b4b4.Te6edf3BleTb4b4b4) Tb4b4b4{
Te6edf3MaterialBluetoothSignalInfoTb4b4b4(Te6edf3rssiTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Te6edf3RowTb4b4b4(Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4, Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3ColumnTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4, Te6edf3vertical Tff7b72= T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3horizontalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterHorizontallyTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3NodeChipTb4b4b4(Te6edf3node Tff7b72= Te6edf3nodeTb4b4b4, Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3onNavigateToNodeDetailsTb4b4b4(Tffa657itTb4b4b4.Te6edf3numTb4b4b4) Tb4b4b4}Tb4b4b4)
Tb4b4b4}

Te6edf3ColumnTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4, Te6edf3fill Tff7b72= Tff7b72trueTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3long_name Tff7b72?: Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3titleMediumTb4b4b4)

Te6edf3nodeTb4b4b4.Te6edf3metadataTff7b72?.Te6edf3firmware_versionTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3firmwareVersion Tff7b72-Tff7b72>
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3firmware_versionTb4b4b4, Te6edf3firmwareVersionTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodySmallTb4b4b4,
Te6edf3maxLines Tff7b72= T79c0ff1Tb4b4b4,
Te6edf3overflow Tff7b72= Te6edf3TextOverflowTb4b4b4.Te6edf3EllipsisTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Te6edf3ButtonTb4b4b4(
Te6edf3shape Tff7b72= Te6edf3RectangleShapeTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3heightTb4b4b4(T79c0ff4T79c0ff0.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3colors Tff7b72=
Te6edf3ButtonDefaultsTb4b4b4.Te6edf3buttonColorsTb4b4b4(
Te6edf3containerColor Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3StatusRedTb4b4b4,
Te6edf3contentColor Tff7b72= Te6edf3ColorTb4b4b4.Te6edf3WhiteTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3onClick Tff7b72= Te6edf3onClickDisconnectTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3disconnectTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tf0883e@PreviewLightDark
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffCurrentlyConnectedInfoPreviewTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3AppTheme Tb4b4b4{
Te6edf3CurrentlyConnectedInfoTb4b4b4(
Te6edf3node Tff7b72=
Te6edf3NodeTb4b4b4(
Te6edf3num Tff7b72= T79c0ff1T79c0ff3T79c0ff4T79c0ff4T79c0ff4Tb4b4b4,
Te6edf3user Tff7b72= Te6edf3UserTb4b4b4(Te6edf3short_name Tff7b72= Ta5d6ff"Ta5d6ff\Ta5d6ffuD83ETa5d6ff\Ta5d6ffuDEE0Ta5d6ff"Tb4b4b4, Te6edf3long_name Tff7b72= Ta5d6ff"Ta5d6ffJohn DoeTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3isIgnored Tff7b72= Tff7b72falseTb4b4b4,
Te6edf3paxcounter Tff7b72= Te6edf3PaxcountTb4b4b4(Te6edf3ble Tff7b72= T79c0ff1T79c0ff0Tb4b4b4, Te6edf3wifi Tff7b72= T79c0ff5Tb4b4b4)Tb4b4b4,
Te6edf3environmentMetrics Tff7b72= Te6edf3EnvironmentMetricsTb4b4b4(Te6edf3temperature Tff7b72= T79c0ff2T79c0ff5fTb4b4b4, Te6edf3relative_humidity Tff7b72= T79c0ff6T79c0ff0fTb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3onNavigateToNodeDetails Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3onClickDisconnect Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.2 - Generated in 0.14s